算法原理:拟合残差 其中初始决策树的预测结果不完全准确,会产生一些残差,因此会用新的决策树来拟合该残差,新的决策树又会产生新的残差,这时再构造新的决策树来拟合新的残差……如此迭代下去,直至符合预先设定的条件为止。 XGBoost模型可以采用pip安装法安装。以Windows操作系统为例,在命令行窗口中输入并执行命令“pipinstallxgboost”,或者在JupyterNotebook中输入并运行代码“!pipinstallxgboost”,即可开始安装。 #简单使用
from xgboost import XGBClassifier
import numpy as np
X=np.array([[1,2],[3,4],[5,6],[7,8],[9,10]])
y=[0,0,0,1,1]
model=XGBClassifier()
model.fit(X,y)
print(model.predict([[5,5]]))
#回归问题
from xgboost import XGBRegressor
X=[[1,2],[3,4],[5,6],[7,8],[9,10]]
y=[1,2,3,4,5]
model=XGBRegressor()
model.fit(X,y)
print(model.predict([[5,5]]))
案例 背景 信用卡盗刷一般发生在持卡人信息被不法分子窃取后复制卡片进行消费或信用卡被他人冒领后激活并消费等情况下。一旦发生信用卡盗刷,持卡人和银行都会遭受一定的经济损失。因此,通过大数据技术搭建金融反欺诈模型对银行来说尤为重要。 import pandas as pd
df=pd.read_excel('信用卡交易数据.xlsx')
X=df.drop(columns='欺诈标签')
y=df['欺诈标签']
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=123)
from xgboost import XGBClassifier
clf=XGBClassifier(n_estimators=100,learning_rate=0.05)
clf.fit(X_train,y_train)
#模型预测及评估
y_pred=clf.predict(X_test)
a=pd.DataFrame()#创建一个空DataFrame
a['预测值']=list(y_pred)
a['实际值']=list(y_test)
from sklearn.metrics import accuracy_score
score=accuracy_score(y_pred,y_test)
clf.score(X_test,y_test)
y_pred_proba=clf.predict_proba(X_test)
from sklearn.metrics import roc_curve
fpr,tpr,thres=roc_curve(y_test,y_pred_proba[:,1])
import matplotlib.pyplot as plt
plt.plot(fpr,tpr)
plt.show()
from sklearn.metrics import roc_auc_score
score=roc_auc_score(y_test,y_pred_proba[:,1])
clf.feature_importances_#查看特征重要性
features=X.columns#获取特征名称
importances=clf.feature_importances_#获取特征重要性
#整理成二维表格,并按特征重要性降序排列
importances_df=pd.DataFrame()
importances_df['特征名称']=features
importances_df['特征重要性']=importances
importances_df.sort_values('特征重要性',ascending=False)
#模型参数调优
·max_depth:弱学习器决策树的最大深度,默认取3。
·n_estimators:弱学习器的个数,或者说弱学习器的最大迭代次数,默认取100。
·learning_rate:学习率,又称为每个弱学习器的权重缩减系数,取值范围为(0,1],取值较小意味着要达到一定的学习效果,需要更多
迭代次数和更多弱学习器,默认取0.1。通常用n_estimators和learning_rate一起决定算法的拟合效果,所以这两个参数要一起调优。
from sklearn.model_selection import GridSearchCV
parameters={'max_depth':[1,3,5],'n_estimators':[50,100,150],'learning_rate':[0.01,0.05,0.1,0.2]}
clf=XGBClassifier()
grid_search=GridSearchCV(clf,parameters,scoring='roc_auc',cv=5)
grid_search.fit(X_train,y_train)#传入训练集数据
grid_search.best_params_ #输出参数的最优值LightGBM算法 https://lightgbm.readthedocs.io 优势:训练效率更高;低内存使用;准确率更高;支持并行化学习;可以处理大规模数据。 在命令行窗口中输入并执行命令“pip install lightgbm”,或者在JupyterNotebook中输入并运行代码“!pip install lightgbm”,即可开始安装。 from lightgbm import LGBMClassifier
X=[[1,2],[3,4],[5,6],[7,8],[9,10]]
y=[0,0,0,1,1]
model=LGBMClassifier()
model.fit(X,y)
print(model.predict([[5,5]]))
from lightgbm import LGBMRegressor
X=[[1,2],[3,4],[5,6],[7,8],[9,10]]
y=[1,2,3,4,5]
model=LGBMRegressor()
model.fit(X,y)
print(model.predict([[5,5]]))案例 背景 银行等金融机构经常会根据客户的个人资料、财产等情况,来预测借款客户是否会违约,以便进行贷前审核、贷中管理、贷后违约处理等工作。金融处理的就是风险,需要在风险和收益之间寻求一个平衡点,现代金融在某种程度上是一个风险定价的过程。通过海量数据对客户进行风险评估并进行合适的借款利率定价,这便是一个典型的风险定价过程,又称为大数据风控。 import pandas as pd
df=pd.read_excel('客户信息及违约表现.xlsx')
X=df.drop(columns='是否违约')
Y=df['是否违约']
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,Y,test_size=0.2,random_state=123)
from lightgbm import LGBMClassifier
model=LGBMClassifier()
model.fit(X_train,y_train)
#模型评估及预测
y_pred=model.predict(X_test)
a=pd.DataFrame()#创建一个空DataFrame
a['预测值']=list(y_pred)
a['实际值']=list(y_test)
from sklearn.metrics import accuracy_score
score=accuracy_score(y_pred,y_test)#查看模型准确率
from sklearn.metrics import roc_auc_score
score=roc_auc_score(y_test.values,y_pred_proba[:,1])#查看预测效果
features=X.columns#获取特征名称
importances=model.feature_importances_#获取特征重要性
#整理成二维表格,并按特征重要性降序排列
importances_df=pd.DataFrame()
importances_df['特征名称']=features
importances_df['特征重要性']=importances
importances_df.sort_values('特征重要性',ascending=False)
#模型参数调优
from sklearn.model_selection import GridSearchCV
parameters={'num_leaves':[10,15,31],'n_estimators':[10,20,30],'learning_rate':[0.05,0.1,0.2]}
model=LGBMClassifier()
grid_search=GridSearchCV(model,parameters,scoring='roc_auc',cv=5)
grid_search.fit(X_train,y_train)#传入数据
grid_search.best_params_#输出参数的最优值
|